namespace CSharpPro._1014;

using System;

class BubbleSortExample
{
    static void test()
    {
        // 待排序的数组
        int[] array = { 64, 34, 25, 12, 22, 11, 90 };
        
        Console.WriteLine("排序前的数组:");
        PrintArray(array);
        
        // 调用冒泡排序方法
        BubbleSort(array);
        
        Console.WriteLine("\n排序后的数组:");
        PrintArray(array);
    }
    
    // 冒泡排序方法
    static void BubbleSort(int[] arr)
    {
        int n = arr.Length;
        bool swapped;
        
        // 外层循环控制需要进行多少轮比较
        for (int i = 0; i < n - 1; i++)
        {
            swapped = false;
            
            // 内层循环进行每一轮的比较和交换
            // 每完成一轮，最大的元素会"浮"到数组末尾，因此可以减少一次比较
            for (int j = 0; j < n - i - 1; j++)
            {
                // 如果当前元素大于下一个元素，则交换它们
                if (arr[j] > arr[j + 1])
                {
                    // 交换元素
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                    
                    swapped = true;
                }
            }
            
            // 如果在本轮中没有发生交换，说明数组已经有序，可以提前退出
            if (!swapped)
                break;
        }
    }
    
    // 打印数组的方法
    static void PrintArray(int[] arr)
    {
        foreach (int item in arr)
        {
            Console.Write(item + " ");
        }
        Console.WriteLine();
    }
}